Encryption is a process of transforming information (referred to as plaintext) into an unreadable form (referred to as ciphertext). Decryption is a transformation that recovers the plaintext from the ciphertext. A cipher performs a transformation that is controlled using a symmetric key (same key used for ciphering and deciphering) or an asymmetric key (different keys used for ciphering and deciphering) such that when the key is input to the cipher along with plaintext, the plaintext is enciphered via an encryption transformation, and when the key is input to the cipher along with ciphertext, the ciphertext is deciphered via a decryption transformation (which is an inverse of the encryption transformation). Encryption transformations are performed by an encryption algorithm (function) of a cipher, and decryption transformations are performed by a decryption algorithm (function) of the cipher. As such, the term “encipher” and “encrypt” may be used interchangeably in the following discussion. Likewise, the term “decipher” and “decrypt” may also be used interchangeably in the following discussion.
Encryption is used to protect military and civilian systems, examples of which include Internet e-commerce, mobile telephone networks, bank automatic teller machines, etc. As technology and computing power advance, new vulnerabilities are commonly discovered for encryption mechanisms that were previously considered secure. When such weaknesses are discovered, new encryption mechanisms and techniques are required to maintain security of sensitive information.
Conventionally, cyphertext block chaining provides an encryption mode to prevent an attacker from being able to create a code table from commonly repeated blocks. For instance, a block of all space characters always results in the same ciphertext block. Specifically, an output stream is prepended with a random block, which is referred to as an initialization vector (IV). For each block to be enciphered, the IV is combined with the current block of plaintext using a binary exclusive or (XOR) operation. Then the resulting block is enciphered with a key. The current IV is replaced with the resulting enciphered block, which is appended to the output stream.
One problem with the above conventional approach is that no additional security is provided against known plaintext attacks. This is because while one of the inputs to the encryption algorithm (the plaintext block) is changed in these modes, the other input, the key, remains static.